1. MPC response overview
As of 11 April 2023, a total of 448,317 persons or 90,324 families
have been reached by MPC interventions. A total of USD 13.3 million has
been disbursed by 17 implementing agencies across 28 sub-districts.
With only certain exceptions (such as activities specified as non-MPC
cash-for-food), only beneficiaries who have received at least USD
100/family/month have been included.
448,000 people reached with MPC, USD 13.3 million disbursed, 11 April 2023governorate | district | communities | partners | households | beneficiaries | total_usd | %_beneficiariesb |
|---|
Aleppo | A'zaz | 5 | 7 | 2,994 | 14,578 | 424,067 | 3.25 |
Aleppo | Afrin | 75 | 10 | 25,162 | 125,312 | 3,726,192 | 27.95 |
Aleppo | Al Bab | 3 | 2 | 998 | 5,011 | 137,791 | 1.12 |
Aleppo | Jarablus | 1 | 3 | 589 | 2,805 | 88,350 | 0.63 |
Aleppo | Jebel Saman | 15 | 8 | 9,226 | 53,754 | 1,380,550 | 11.99 |
Idleb | Harim | 38 | 13 | 43,136 | 204,566 | 6,273,250 | 45.63 |
Idleb | Idleb | 17 | 10 | 5,634 | 28,502 | 879,372 | 6.36 |
Idleb | Jisr-Ash-Shugur | 21 | 3 | 2,585 | 13,789 | 350,200 | 3.08 |
Total | - | - | - | 90,324 | 448,317 | 13,259,772 | 100.00 |
bAs percentage of all MPC beneficiaries reached in NW Syria; |
177,525 beneficiaries were reached in February 2023 and 200,330 were
reached in March 2023. 52,252 have been reached so far in April
2023.Changes in numbers of persons reached were due to cleaning and
verification of the dataset – this process is still ongoing and will
only be completed once the CWG fully transitions to 4W reporting.
1.1 Progress by date

The 6,160` beneficiaries reached earlier that 2023-02-09 all
pertained to the HRP, the only such beneficiaries reported so far.
3. Geographic breakdown of beneficiaries
Coverage continues to be highest in Afrin and Harim districts, which
have been worst-hit by the earthquake.

Casualties and damaged houses, absolute figures and per 100,000 personsgovernorate | district | wounded_dead1 | wounded_dead_100k1 | damaged_houses1 | damaged_houses_100k1 |
|---|
Aleppo | A'zaz | 356 | 57.87 | 276 | 44.86 |
Aleppo | Afrin | 2,232 | 478.79 | 2,910 | 624.22 |
Aleppo | Al Bab | 206 | 70.04 | 832 | 282.89 |
Aleppo | Jarablus | 40 | 33.82 | 257 | 217.30 |
Aleppo | Jebel Saman | 616 | 236.80 | 176 | 67.66 |
Idleb | Harim | 8,449 | 507.65 | 3,230 | 194.07 |
Idleb | Idleb | 350 | 48.23 | 946 | 130.37 |
Idleb | Jisr-Ash-Shugur | 595 | 183.68 | 1,915 | 591.18 |
1Data from the Assistance Coordination Unit, Syria 20230328; |
Below is a breakdown of beneficiaries based on whether they originate
from camps or villages:
More than twice as many beneficiaries from villages as from campsvillage_camps | beneficiaries | %_beneficiaries |
|---|
camp | 94,430 | 21.06 |
village | 228,690 | 51.01 |
NA | 125,197 | 27.93 |
3.1 By sub-district
The plots below show the breakdown of beneficiaries by sub-district.
Caution must be taken to ensure that allocations are fair across the
affected areas: there are numerous sub-districts where a very large
proportion of the total population has already been reached by
multi-purpose cash, in particular, Jandairis, Hairm, Salqin and
Sharan.
Response activities must be proportional with the magnitude and
severity of earthquake damage. Overallocation deprives affected persons
of the aid they are due.
The average percentage of the population reached, of all
sub-districts, is 10.63%.

3.2 Comparisons with PIN and earthquake damage
The plot below shows the total population of each sub-district on the
x-axis (for the moment, all persons in these areas are assumed to be
affected and are included in the PIN) and the number of beneficiaries on
the y-axis.
The size of each point indicates the number of dead or wounded
persons there per 100,000.

The higher or lower a sub-district is above the blue line, the more
disproportionate the number of beneficiaries allocated to that location
are.
This should also be compared to each sub-district’s share of the
earthquake damage. Of particular note, sub-districts in grey have yet to
receive any MPC assistance.

The CWG is currently working on a prioritisation score, which can be
a useful shorthand (or crutch), that will take into account pre-existing
vulnerability (likely from the MSNA) as well as earthquake impacts.
3.3 Planned activities

4. Cash response actors and cash disbursed
In the scatterplot below, each point is a single cash working group
partner. The x-axis indicates the number of beneficiaries reached per
agency and the y-axis indicates the number of communities (admin4)
reached.
USD 13.3 million has been distributed across 174 communities and 28
sub-districts in NW Syria.
The table below summarises the information in the scatterplot above
in tabular form:
Reach and footprint of cash response actorsimplementing_partner1 | beneficiaries | districts | communities |
|---|
CBRTWG-006 | 67,989 | 3 | 20 |
People in Need (PIN) | 36,144 | 3 | 25 |
GOAL (GOAL) | 34,310 | 3 | 70 |
CBRTWG-010 | 33,115 | 5 | 15 |
Norwegian Refugee Council (NRC) | 20,900 | 2 | 5 |
CBRTWG-035 | 14,197 | 5 | 27 |
Mercy Without Limits | 13,016 | 4 | 10 |
Bahar Organization (BO) | 12,000 | 1 | 1 |
Agency for Technical Cooperation and Development (ACTED) | 10,481 | 7 | 28 |
Uluslararasi Insani Yardimlasma Dernegi (IYD) | 10,351 | 4 | 16 |
Syria Relief | 9,750 | 5 | 7 |
Ihsan for Relief and Development | 8,655 | 5 | 16 |
World Vision International (WVI) | 7,008 | 1 | 4 |
Welthungerhilfe (WHH) | 4,830 | 4 | 4 |
Ataa Humanitarian Relief Association (ATAA) | 3,060 | 1 | 2 |
MASRRAT | 2,692 | 3 | 3 |
Elaf for relief and development | 1,750 | 1 | 1 |
1Only partners who provided more than USD 100/family/month; |
4.1 USD disbursed per partner
USD disbursed and families reached by partnerimplementing_partner | total_usd | families | usd_per_fam | %_usd_total |
|---|
GOAL (GOAL) | 2,998,650 | 19,991 | 150.00 | 22.61 |
CBRTWG-006 | 1,773,750 | 11,825 | 150.00 | 13.38 |
CBRTWG-010 | 1,590,100 | 11,287 | 140.88 | 11.99 |
Norwegian Refugee Council (NRC) | 1,266,450 | 8,443 | 150.00 | 9.55 |
People in Need (PIN) | 927,450 | 6,183 | 150.00 | 6.99 |
Ihsan for Relief and Development | 854,250 | 5,695 | 150.00 | 6.44 |
Syria Relief | 724,500 | 4,830 | 150.00 | 5.46 |
Agency for Technical Cooperation and Development (ACTED) | 515,350 | 3,373 | 152.79 | 3.89 |
Mercy Without Limits | 438,372 | 3,325 | 131.84 | 3.31 |
CBRTWG-035 | 409,800 | 4,098 | 100.00 | 3.09 |
Uluslararasi Insani Yardimlasma Dernegi (IYD) | 375,000 | 2,500 | 150.00 | 2.83 |
Bahar Organization (BO) | 360,000 | 2,400 | 150.00 | 2.71 |
Welthungerhilfe (WHH) | 344,400 | 2,296 | 150.00 | 2.60 |
World Vision International (WVI) | 301,200 | 2,008 | 150.00 | 2.27 |
Ataa Humanitarian Relief Association (ATAA) | 177,000 | 1,180 | 150.00 | 1.33 |
Elaf for relief and development | 122,500 | 350 | 350.00 | 0.92 |
MASRRAT | 81,000 | 540 | 150.00 | 0.61 |
The CWG is currently working with other Clusters to consolidate all
cash-based activities and will soon be able to provide more
comprehensive reporting.
5. Annexes
5.1 Interactive reference table at sub-district level
Columns include: governorate, district,
sub-district, total population,
beneficiaries, total usd disbursed,
wounded and dead, wounded and dead per 100k,
damaged houses, damaged houses per 100k,
admin3pcode
5.2 Reporting quality
This section documents issues encountered in the cleaning of 4W and
FSL data and their impacts on the quality of reporting the CWG can
provide.
Note that substantial cleaning has already taken place and these
outstanding issues could not be resolved by the time of reporting.
However, the CWG recognises that not all reporting issues were due to
partner error. The CWG will work with partners to continue improving
reporting quality.
Still, one third of reporting originates from the FSL trackersource | partners | beneficiaries | %_beneficiaries |
|---|
4ws | 11 | 308,417 | 68.79 |
fsl_tracker | 7 | 139,900 | 31.21 |
Below is a breakdown of reporting by date:
January reporting is still largely incompletemonth | partners | beneficiaries | %_beneficiaries |
|---|
Jan | 2 | 3,778 | 0.84 |
Feb | 8 | 177,525 | 39.60 |
Mar | 10 | 200,330 | 44.68 |
Apr | 5 | 52,252 | 11.66 |
| 1 | 14,432 | 3.22 |
Activities pertaining to 14,432 were missing their date or had dates
in unreadable formats. However, the columns start date,
end date and month of reporting were some of
the most troublesome and consumed a large part of the time dedicated to
data cleaning.
The CWG would like to reiterate that start date and
end date should be entered in the format mm/dd/yyyy and
that month of reporting should be selected from the
dropdown menu.
12 partners have reported planned activitiesproject_status | partners | beneficiaries | %_beneficiaries |
|---|
Completed | 17 | 448,317 | 87.83 |
Planned | 12 | 62,129 | 12.17 |
Suspended | 1 | 0 | 0.00 |
The sum of planned beneficiaries is 62,129. If this is the extent of
all planned MPC activities, the CWG as a whole can expect to reach
around 77% of its target of 662,942 persons.
Below is a breakdown of planned actitivities by source:
Breakdown of planned activities by sourcesource | partners | beneficiaries | %_beneficiaries |
|---|
4ws | 7 | 40,542 | 65.25 |
fsl_tracker | 5 | 21,587 | 34.75 |
LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiNCBBcHJpbCAyMDIzIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgY29sbGFwc2VkOiBubw0KYWx3YXlzX2FsbG93X2h0bWw6IHllcw0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQoNCiNUT0M6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICIiOw0KICBkaXNwbGF5OiBibG9jazsNCiAgaGVpZ2h0OiA3MHB4Ow0KICBtYXJnaW46IDJlbSAyMHB4IDQwcHggMjBweDsNCiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJOV1MtQ1dHIGxvZ28uUE5HIik7DQogIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCn0NCmBgYA0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQogICAgYm9keSAubWFpbi1jb250YWluZXIgew0KICAgICAgICBtYXgtd2lkdGg6IDEyODBweDsNCiAgICB9DQo8L3N0eWxlPg0KYGBgDQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBmaWcud2lkdGg9OSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShzdHJpbmdpKQ0KbGlicmFyeShwYW5kZXIpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkodmlyaWRpcykNCmxpYnJhcnkoc2tpbXIpDQpsaWJyYXJ5KHBhdGNod29yaykNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGhlcmUpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGZsZXh0YWJsZSkNCmxpYnJhcnkoc25ha2VjYXNlKQ0KbGlicmFyeShhcmFiaWNTdGVtUikNCmxpYnJhcnkod3JpdGV4bCkNCmxpYnJhcnkobWRlcHJpdikNCmxpYnJhcnkoZ2dyZXBlbCkNCg0KdGhlbWVfc2V0KHRoZW1lX2xpZ2h0KCkpDQoNCiMgZGlzYWJsaW5nIHNjaWVudGlmaWMgbm90YXRpb24NCm9wdGlvbnMoc2NpcGVuID0gMTAwKQ0KDQojIHBhbmRlciB0YWJsZXMgYWxsIGluIG9uZSByb3cNCnBhbmRlck9wdGlvbnMoJ3RhYmxlLnNwbGl0LnRhYmxlJywgSW5mKQ0KDQojIHBhbmRlciB0aG91c2FuZHMgc2VwYXJhdG9yDQpwYW5kZXJPcHRpb25zKCJiaWcubWFyayIsICIsIikNCg0KIyByZXBsYWNlIA0Kb3B0cyA8LSBvcHRpb25zKGtuaXRyLmthYmxlLk5BID0gIiIpDQoNCmAlb3V0JWAgPC0gTmVnYXRlKGAlaW4lYCkNCg0KIyBmdW5jdGlvbiBmb3IgdHJhbnNwb3NpbmcgZGYNCnRyYW5zcG9zZV9kZiA8LSBmdW5jdGlvbihkZikgew0KICB0X2RmIDwtIGRhdGEudGFibGU6OnRyYW5zcG9zZShkZikNCiAgY29sbmFtZXModF9kZikgPC0gcm93bmFtZXMoZGYpDQogIHJvd25hbWVzKHRfZGYpIDwtIGNvbG5hbWVzKGRmKQ0KICB0X2RmIDwtIHRfZGYgJT4lDQogICAgdGliYmxlOjpyb3duYW1lc190b19jb2x1bW4oLmRhdGEgPSAuKSAlPiUNCiAgICB0aWJibGU6OmFzX3RpYmJsZSguKQ0KICByZXR1cm4odF9kZikNCn0NCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMNCnN1bV9iZW4gPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIpew0KICANCiAgY29sdW1uX3ZhciA8LSBlbnF1byhjb2x1bW5fdmFyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICAgIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkNCiAgICANCn0NCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMsIDIgZ3JvdXBlZCB2YXJpYWJsZXMNCnN1bV9iZW4yIDwtIGZ1bmN0aW9uKGRmLCBjb2x1bW5fdmFyMSwgY29sdW1uX3ZhcjIpew0KICANCiAgY29sdW1uX3ZhcjEgPC0gZW5xdW8oY29sdW1uX3ZhcjEpDQogIGNvbHVtbl92YXIyIDwtIGVucXVvKGNvbHVtbl92YXIyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyMSwgISFjb2x1bW5fdmFyMikgJT4lICMgbXVzdCBhZGQgYmFuZy1iYW5nDQogICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0obmV3X2JlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpDQogICAgDQp9DQoNCiMgc2NhbGluZyBmdW5jdGlvbnMgDQpyYW5nZTAxIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4KSkvKG1heCh4KS1taW4oeCkpfQ0KcmFuZ2Vfd25hIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4LCBuYS5ybSA9IFRSVUUpKS8obWF4KHgsIG5hLnJtID0gVFJVRSktbWluKHgsIG5hLnJtID0gVFJVRSkpfQ0KDQojbW9kZSBmdW5jdGlvbiANCm1vZGUgPC0gZnVuY3Rpb24oeCkgew0KICB1eCA8LSB1bmlxdWUoeCkNCiAgdXhbd2hpY2gubWF4KHRhYnVsYXRlKG1hdGNoKHgsIHV4KSkpXQ0KfQ0KDQpsb2NhdGlvbnMgPC0gcmVhZF9leGNlbCgiLi9kYXRhL0xvY2F0aW9ucy54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCnBjb2RlM19zaGFwZSA8LSANCiAgc3RfcmVhZCgiLi9kYXRhL3N5cl9hZG1ibmRhX3VuY3NfdW5vY2hhXzIwMjAxMjE3L3N5cl9hZG1ibmRhX2FkbTNfdW5jc191bm9jaGFfMjAyMDEyMTcuc2hwIikNCg0KYXJhYmljX2xhYmVscyA8LSBmdW5jdGlvbih4KSBwYXN0ZTAoIlx1MjAyYiIsIHgpDQoNCnJlcG9ydF9kYXRlIDwtICIxMSBBcHJpbCAyMDIzIg0KYGBgDQoNCg0KYGBge3IgZGF0YX0NCm5hbWVzX2VxIDwtIGMoDQogICJkYXRlIiwNCiAgImdvdmVybm9yYXRlIiwNCiAgImRpc3RyaWN0IiwNCiAgInN1Yl9kaXN0cmljdCIsDQogICJjb21tdW5pdHkiLA0KICAiYWRtaW40IiwNCiAgImNhc3VhbHRpZXMiLA0KICAiaW5qdXJpZXMiLA0KICAiY29tcGxldGVseV9kZXN0cm95ZWRfaG91c2VzIiwNCiAgImRhbWFnZWRfdW5paGFiaXRhYmxlX2hvdXNlcyIsDQogICJ0ZW1wb3JhcnlfYWNjb21tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fYWxsX2NlbnRyZXMiLA0KICAic2Nob29sc19hc19hY2NvbW9kYXRpb25fY2VudHJlcyIsDQogICJpZHBzX2luX3NjaG9vbHMiLA0KICAidGVudHNfbmVlZGVkIiwNCiAgImJsYW5rZXRzX21hdHRyZXNzZXNfbmVlZGVkIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXNfYXZhaWxhYmxlIiwgDQogICJhY2Nlc3NpYmxlX2NpdmlsX2RlZmVuc2UiLA0KICAibGF0cmluZXNfYXZhaWxhYmxlIiwNCiAgIm1lYWxzX25lZWRlZF9wZXJfZGF5IiwNCiAgIm5lZWRfYmxvb2RfZG9uYXRpb25zIiwNCiAgImhlYWx0aF9zZXJ2aWNlc19hdmFpbGFibGUiLA0KICAibmVjZXNzYXJ5X21lZGljYWxfZXF1aXBtZW50IiwNCiAgInJ1YmJsZV92b2x1bnRlZXJzIiwNCiAgInRlbGVjb21zX2F2YWlsYWJsZSIsDQogICJlbGVjdHJpY2l0eV9hdmFpbGFibGUiLCANCiAgImhlYXRpbmdfZnVlbF9uZWVkZWQiDQopDQoNCmVxIDwtIHJlYWRfZXhjZWwoIi4vZGF0YS9zeXJpYS1lYXJ0aHF1YWtlLWltcGFjdC0yMC1tYXJjaC0yMDIzLnhsc3giLA0KICAgICAgICAgICAgICAgICBzaGVldCA9ICJEQVRBU0VUIikgJT4lIA0KICBzZXROYW1lcyhuYW1lc19lcSkgJT4lIA0KICBsZWZ0X2pvaW4obG9jYXRpb25zICU+JSBzZWxlY3QoYWRtaW40cGNvZGUsIGFkbWluM3Bjb2RlKSwgDQogICAgICAgICAgICBieSA9IGMoImFkbWluNCIgPSAiYWRtaW40cGNvZGUiKSkgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLA0KICAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gY29tcGxldGVseV9kZXN0cm95ZWRfaG91c2VzICsgZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzKSAlPiUgDQogICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgc3VtbWFyaXNlKHdvdW5kZWRfZGVhZCA9IHN1bSh3b3VuZGVkX2RlYWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gc3VtKGRhbWFnZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGxlZnRfam9pbihyZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogICAgICAgICAgICAgIGNsZWFuX25hbWVzKCkgJT4lDQogICAgICAgICAgICAgIHNlbGVjdChhZG1pbjNwY29kZSwgdG90YWxfcG9wdWxhdGlvbiksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIG11dGF0ZSh3b3VuZGVkX2RlYWRfMTAwayA9IHdvdW5kZWRfZGVhZCAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAwMDAsIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IGRhbWFnZWRfaG91c2VzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMDAwMCkNCg0KDQplcV9tZGVwcml2IDwtIGVxICU+JQ0KICBtdXRhdGVfYXQodmFycyh3b3VuZGVkX2RlYWQsIGRhbWFnZWRfaG91c2VzLCANCiAgICAgICAgICAgICAgICAgd291bmRlZF9kZWFkXzEwMGssIGRhbWFnZWRfaG91c2VzXzEwMGspLCB+IHJhbmdlX3duYSguKSkgJT4lIA0KICBtZGVwcml2KGMoIndvdW5kZWRfZGVhZCIsICJkYW1hZ2VkX2hvdXNlcyIsIA0KICAgICAgICAgICAgIndvdW5kZWRfZGVhZF8xMDBrIiwgImRhbWFnZWRfaG91c2VzXzEwMGsiKSwgDQogICAgICAgICAgbWV0aG9kID0gImN6Iiwgb3V0cHV0ID0gImFsbCIsIA0KICAgICAgICAgIHNjb3JlX2lfaGVhZGluZyA9ICJlcV9zY29yZSIpDQoNCmVxIDwtIGVxICU+JSANCiAgbGVmdF9qb2luKGVxX21kZXByaXYkZGF0YSAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChhZG1pbjNwY29kZSwgZXFfc2NvcmUpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikNCg0KIyBUaGluayBvZiBhbm90aGVyIHdheSB0byBkbyB0aGlzIC0tIGlmIHNvbWVvbmUgZWxzZSBydW5zIHRoaXMsIGl0IHdvbid0IHdvcmsgDQpjYnIgPC0gcmVhZF9jc3YoIi4vZGF0YS9jYnJfY29tLmNzdiIpICU+JSANCiAgbXV0YXRlKG1vbnRoID0gbW9udGgoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdChiZW5lZmljaWFyaWVzID0gMCkpIA0KICANCg0KaG5vIDwtIHJlYWRfZXhjZWwoIi4vZGF0YS8yMDIzSE5PX1BpTl9TZXZlcml0eV9kZXRhaWxlZEFvSV9GT1JTSEFSRSAxNTAzMjAyMy54bHN4Iiwgc2tpcCA9IDEsIA0KICAgICAgICAgICAgICAgICAgc2hlZXQgPSAxKSAlPiUNCiAgY2xlYW5fbmFtZXMoKQ0KDQoNCm53X3Bjb2RlMyA8LSBobm8gJT4lIA0KICBmaWx0ZXIoYW9fYyA9PSAiTlciKSAlPiUgDQogIHB1bGwoYWRtaW4zcGNvZGUpDQoNCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KIyAxLiBNUEMgcmVzcG9uc2Ugb3ZlcnZpZXcNCg0KQXMgb2YgMTEgQXByaWwgMjAyMywgYSB0b3RhbCBvZiBgciBjYnIgJT4lIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRiZW5lZmljaWFyaWVzKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHBlcnNvbnMgb3IgYHIgY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kZmFtaWxpZXMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBmYW1pbGllcyBoYXZlIGJlZW4gcmVhY2hlZCBieSBNUEMgaW50ZXJ2ZW50aW9ucy4gDQpBIHRvdGFsIG9mIFVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgIHtzdW0oLiR0b3RhbF91c2QpfSkgLyAxMDAwMDAwLCAxKSwgdHJpbSA9IFRSVUUpLCAibWlsbGlvbiIpYCBoYXMgYmVlbiBkaXNidXJzZWQgYnkgYHIgY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSBzdW1tYXJpc2Uobl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lcikpICU+JSBwdWxsKClgIGltcGxlbWVudGluZyBhZ2VuY2llcyBhY3Jvc3MgYHIgY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSBzdW1tYXJpc2Uobl9kaXN0aW5jdChhZG1pbjNwY29kZSkpICU+JSBwdWxsKClgIHN1Yi1kaXN0cmljdHMuIA0KDQpXaXRoIG9ubHkgY2VydGFpbiBleGNlcHRpb25zIChzdWNoIGFzIGFjdGl2aXRpZXMgc3BlY2lmaWVkIGFzIG5vbi1NUEMgY2FzaC1mb3ItZm9vZCksIG9ubHkgYmVuZWZpY2lhcmllcyB3aG8gaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBVU0QgMTAwL2ZhbWlseS9tb250aCBoYXZlIGJlZW4gaW5jbHVkZWQuDQoNCjxicj4NCg0KYGBge3Igc3VtbWFyeSB0YWJsZX0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UocGFydG5lcnMgPSBuX2Rpc3RpbmN0KGltcGxlbWVudGluZ19wYXJ0bmVyKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpLCANCiAgICAgICAgICAgIGhvdXNlaG9sZHMgPSBzdW0oZmFtaWxpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsX3VzZCA9IHN1bSh0b3RhbF91c2QsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gDQogICAgICAgICAgIHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSAqIDEwMCwgZGlnaXRzID0gMikpICU+JQ0KICBhZG9ybl90b3RhbHMoInJvdyIsLCwsIGhvdXNlaG9sZHMsIGJlbmVmaWNpYXJpZXMsIHRvdGFsX3VzZCwgYCVfYmVuZWZpY2lhcmllc2ApICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gaWZlbHNlKGAlX2JlbmVmaWNpYXJpZXNgID4gOTkuOTgsIDEwMCwgYCVfYmVuZWZpY2lhcmllc2ApKSAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QsIGNvbW11bml0aWVzLCBwYXJ0bmVycywgDQogICAgICAgICBob3VzZWhvbGRzLCBiZW5lZmljaWFyaWVzLCB0b3RhbF91c2QsIGAlX2JlbmVmaWNpYXJpZXNgKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCI0NDgsMDAwIHBlb3BsZSByZWFjaGVkIHdpdGggTVBDLCBVU0QgMTMuMyBtaWxsaW9uIGRpc2J1cnNlZCwgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KIyAgZm9vdG5vdGUoaSA9IDEsIGogPSA2LCBwYXJ0ID0gImhlYWRlciIsIHJlZl9zeW1ib2xzID0gImEiLA0KIyAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJCZW5lZmljaWFyeSBmaWd1cmVzIGluY2x1ZGUgb25seSByZXBvcnRlZCBNUEMgd2l0aCBhIG1pbmltdW0gdHJhbnNmZXIgdmFsdWUgI29mIFVTRCAxMDAiKSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDgsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYiIsIGlubGluZSA9IFRSVUUsICANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJBcyBwZXJjZW50YWdlIG9mIGFsbCBNUEMgYmVuZWZpY2lhcmllcyByZWFjaGVkIGluIE5XIFN5cmlhIikpIA0KDQoNCmBgYA0KDQoNCmBgYHtyIGV2YWwgPSBGQUxTRX0NCg0KIyBKdXN0IGJyZWFrZG93biBieSBtb250aCAtLSBkb24ndCBrbm93IHdoeSBJIGRpZCBhIGxpbmUgcGxvdCBpbnN0ZWFkIG9mIGEgYmFycGxvdCwgDQojIG1heWJlIGJhcnBsb3Qgd2hlbiB0aGVyZSBhcmUgbW9yZSBtb250aHMgDQoNCmNiciAlPiUgDQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRpc3RyaWJ1dGlvbl9kYXRlKSkgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgDQogIGdyb3VwX2J5KG1vbnRoKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpDQoNCmNiciAlPiUgY291bnQoaW1wbGVtZW50aW5nX3BhcnRuZXIsIHBhcnRuZXJfY29kZSkNCg0KYGZpbHRlcihjYnIsIG1vbnRoID09IDIgJiBwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWANCg0KYGBgDQoNCjxicj4NCg0KYHIgZmlsdGVyKGNiciwgbW9udGggPT0gMiAmIHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBiZW5lZmljaWFyaWVzIHdlcmUgcmVhY2hlZCBpbiBGZWJydWFyeSAyMDIzIGFuZCBgciBmaWx0ZXIoY2JyLCBtb250aCA9PSAzICYgcHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgcmVhY2hlZCBpbiBNYXJjaCAyMDIzLiBgciBmaWx0ZXIoY2JyLCBtb250aCA9PSA0ICYgcHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGhhdmUgYmVlbiByZWFjaGVkIHNvIGZhciBpbiBBcHJpbCAyMDIzLkNoYW5nZXMgaW4gbnVtYmVycyBvZiBwZXJzb25zIHJlYWNoZWQgd2VyZSBkdWUgdG8gY2xlYW5pbmcgYW5kIHZlcmlmaWNhdGlvbiBvZiB0aGUgZGF0YXNldCAtLSB0aGlzIHByb2Nlc3MgaXMgc3RpbGwgb25nb2luZyBhbmQgd2lsbCBvbmx5IGJlIGNvbXBsZXRlZCBvbmNlIHRoZSBDV0cgZnVsbHkgdHJhbnNpdGlvbnMgdG8gNFcgcmVwb3J0aW5nLiANCg0KICANCiAgDQoNCmBgYHtyIGV2YWw9RkFMU0V9DQpjYnIgJT4lIA0KICBtdXRhdGUoZGlzdHJpYnV0aW9uX2RhdGUgPSBhcy5EYXRlKGRpc3RyaWJ1dGlvbl9kYXRlKSkgJT4lIA0KICBmaWx0ZXIoZGlzdHJpYnV0aW9uX2RhdGUgPT0gIjAwMjItMDEtMjAiKSAlPiUgDQogIHtzdW0oLiRiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpfQ0KYGBgDQoNCjxicj48YnI+DQoNCiMjIDEuMSBQcm9ncmVzcyBieSBkYXRlDQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCmNiciAlPiUNCiAgbXV0YXRlKGRpc3RyaWJ1dGlvbl9kYXRlID0gYXMuRGF0ZShkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgZmlsdGVyKCFpcy5uYShkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGRpc3RyaWJ1dGlvbl9kYXRlKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUNCiAgYXJyYW5nZShkaXN0cmlidXRpb25fZGF0ZSkgJT4lIA0KICBmaWx0ZXIoZGlzdHJpYnV0aW9uX2RhdGUgIT0gIjAwMjItMDEtMjAiKSAlPiUgDQogIG11dGF0ZShpZmVsc2UoZGlzdHJpYnV0aW9uX2RhdGUgPiAiMjAyMy0wNC0xMSIsICIyMDIzLTA0LTExIiwgZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIG11dGF0ZShjdW1fYmVuID0gY3Vtc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIG11dGF0ZShjdW1fbGFiZWwgPSBpZmVsc2UoZGlzdHJpYnV0aW9uX2RhdGUgPT0gIjIwMjMtMDItMDkiIHwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25fZGF0ZSA9PSAiMjAyMy0wMy0wMiIgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpc3RyaWJ1dGlvbl9kYXRlID09ICIyMDIzLTAzLTIyIiB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25fZGF0ZSA9PSAiMjAyMy0wMy0zMCJ8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25fZGF0ZSA9PSAiMjAyMy0wNC0xNSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1bV9iZW4sICIiKSwgDQogICAgICAgICBjdW1fbGFiZWwgPSBhcy5udW1lcmljKGN1bV9sYWJlbCkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBkaXN0cmlidXRpb25fZGF0ZSwgeSA9IGN1bV9iZW4pKSArIA0KICBnZW9tX2xpbmUoY29sb3VyID0gImJsdWUiKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpjb21tYShjdW1fbGFiZWwpKSwgdmp1c3QgPSAtLjYsIA0KICAgICAgICAgICAgc2l6ZSA9IDQpICsgDQogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIHdlZWsiLCBkYXRlX2xhYmVscyA9ICIlZC0lYiIpICsNCiAgIyBXaHkgZGlkbid0IHlvdSBsZWFybiB0aGlzIGJlZm9yZT8gDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgZXhwYW5kID0gZXhwYW5zaW9uKG11bHQgPSAuMSkpICsgDQogIGxhYnMoeCA9ICJEaXN0cmlidXRpb24gZGF0ZSIsIA0KICAgICAgIHkgPSAiQ3VtdWxhdGl2ZSBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgdGl0bGUgPSAiTVBDIHByb2dyZXNzIGJ5IGRhdGUiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJUaGUgZWFybGllc3QgZWFydGhxdWFrZS1yZWxhdGVkIGRpc3RyaWJ1dGlvbiB3YXMgMjAyMy0wMi0wOVxuRXhjbHVkZXMgMTYsNDYwIGJlbmVmaWNpYXJpZXMgZm9yIHdoaWNoIHRoZSBkYXRlIHdhcyBub3QgcmVwb3J0ZWQgb3Igd2FzIHVucmVhZGFibGUiKSAgDQogIA0KIyBnZ3NhdmUoIi4vaW1nL3Byb2dyZXNzX2xpbmUucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA4LjI3LCB3aWR0aCA9IDExLjY5LCB1bml0cyA9ICJpbiIpICANCmBgYA0KDQo8YnI+DQoNClRoZSBgciBmb3JtYXQoZmlsdGVyKGNiciwgcmVzcG9uc2VfdHlwZSA9PSAiSFJQIiAmIHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSl9LCBiaWcubWFyayA9ICIsIilgYCBiZW5lZmljaWFyaWVzIHJlYWNoZWQgZWFybGllciB0aGF0IDIwMjMtMDItMDkgYWxsIHBlcnRhaW5lZCB0byB0aGUgSFJQLCB0aGUgb25seSBzdWNoIGJlbmVmaWNpYXJpZXMgcmVwb3J0ZWQgc28gZmFyLiANCg0KPGJyPjxicj4NCg0KIyAyLiBNYXAgb2YgYWN0aXZpdGllcw0KDQo8YnI+DQoNCmBgYHtyIGZpZy5oZWlnaHQ9N30NCg0KcGxhbm5lZF9pbXBsZW1lbnRlZF9tYXAgPC0gY2JyICU+JSANCiAgcmlnaHRfam9pbihwY29kZTNfc2hhcGUsIA0KICAgICAgICAgICAgIGJ5ID0gYygiYWRtaW4zcGNvZGUiID0gIkFETTNfUENPREUiKSkgJT4lIA0KICBmaWx0ZXIoQURNMV9QQ09ERSAlaW4lIGMoIlNZMDIiLCAiU1kwNyIpICYgIWlzLm5hKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lDQogIGdncGxvdCgpICsgDQogIGdlb21fc2Yoc2l6ZSA9IC4xLCBjb2xvdXIgPSAiZ3JleTcwIikgKyANCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IGJlbmVmaWNpYXJpZXMsDQogICAgICAgICAgICAgICAgIGNvbG91ciA9IHByb2plY3Rfc3RhdHVzLCANCiAgICAgICAgICAgICAgICAgeCA9IGxvbmdpdHVkZV94LCB5ID0gbGF0aXR1ZGVfeSwgDQogICAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAoInN1Yl9kaXN0cmljdDogIiwgc3ViX2Rpc3RyaWN0LCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tdW5pdHk6ICIsIGNvbW11bml0eSwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb25fdHlwZTogIiwgdmlsbGFnZV9jYW1wcywgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllczoiLCBmb3JtYXQoYmVuZWZpY2lhcmllcywgYmlnLm1hcmsgPSAiLCIpLCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJ0bmVyOiAiLCBhYmJyZXZpYXRpb24sICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb25feDogIiwgbG9uZ2l0dWRlX3gsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhdF95OiAiLCBsYXRpdHVkZV95KSksIA0KICAgICAgICAgICAgIHNoYXBlID0gMjEsIHN0cm9rZSA9IC4zNSwgDQogICAgICAgICAgICAgYWxwaGEgPSAuNSkgKyANCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV9jb2xvdXJfdmlyaWRpc19kKG5hLnRyYW5zbGF0ZSA9IEZBTFNFKSArIA0KICB0aGVtZV92b2lkKCkgKyANCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSBOQSksIA0KICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCkgKw0KICBsYWJzKHRpdGxlID0gIkNvbW11bml0aWVzIHJlYWNoZWQgYW5kIHBsYW5uZWQgLS0gQ1dHIHBhcnRuZXJzIiwgDQogICAgICAgc3VidGl0bGUgPSAiUGxhbm5lZCBpbiB5ZWxsb3csIGNvbXBsZXRlZCBpbiBwdXJwbGUsIHNpemUgc2hvd3MgbnVtYmVyIG9mIHBlcnNvbnMiLCANCiAgICAgICBjb2xvdXIgPSAiU3RhdHVzIikgKw0KICBndWlkZXMoc2l6ZSA9ICJub25lIikNCg0KICANCmdncGxvdGx5KHBsYW5uZWRfaW1wbGVtZW50ZWRfbWFwLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIHBsb3RseTo6c3R5bGUoaG92ZXJvbiA9ICJwb2ludCIpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJDb21tdW5pdGllcyByZWFjaGVkIGFuZCBwbGFubmVkIC0tIENXRyBwYXJ0bmVycyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5uZWQgaW4geWVsbG93LCBjb21wbGV0ZWQgaW4gcHVycGxlLCBzaXplIHNob3dzIG51bWJlciBvZiBwZXJzb25zOyBjbGljayBhbmQgZHJhZyB0byB6b29tOyBtb3VzZSBvdmVyIGZvciBkZXRhaWxzIikpKQ0KICANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KIyAzLiBHZW9ncmFwaGljIGJyZWFrZG93biBvZiBiZW5lZmljaWFyaWVzIA0KDQpDb3ZlcmFnZSBjb250aW51ZXMgdG8gYmUgaGlnaGVzdCBpbiBBZnJpbiBhbmQgSGFyaW0gZGlzdHJpY3RzLCB3aGljaCBoYXZlIGJlZW4gd29yc3QtaGl0IGJ5IHRoZSBlYXJ0aHF1YWtlLiANCg0KPGJyPg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVvcmRlcihkaXN0cmljdCwgYmVuZWZpY2lhcmllcyksIA0KICAgICAgICAgZ292ZXJub3JhdGUgPSBmY3RfcmVsZXZlbChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIklkbGViIiwgIkFsZXBwbyIpKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gZGlzdHJpY3QpKSArIA0KICBnZW9tX2NvbChhZXMoZmlsbCA9IGdvdmVybm9yYXRlKSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGJlbmVmaWNpYXJpZXMpKSwgDQogICAgICAgICAgICBoanVzdCA9ICJpbndhcmQiKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZChiZWdpbiA9IC4zKSArIA0KICBsYWJzKHRpdGxlID0gIk1QQyBiZW5lZmljaWFyaWVzIGJ5IGRpc3RyaWN0IiwgDQogICAgICAgc3VidGl0bGUgPSAiYXMgb2YgMTEgQXByaWwgMjAyMyIsIA0KICAgICAgIHkgPSAiIikgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArIA0KDQpobm8gJT4lIA0KICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4sIGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbikgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfcG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIC5ncm91cHMgPSAiZHJvcCIpICU+JSANCiAgbGVmdF9qb2luKA0KICAgIGNiciAlPiUNCiAgICAgIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lICANCiAgICAgIGdyb3VwX2J5KGRpc3RyaWN0KSAlPiUgDQogICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAsICANCiAgYnkgPSAiZGlzdHJpY3QiKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZWxldmVsKGRpc3RyaWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsIEJhYiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmFyYWJsdXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEnemF6IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKZWJlbCBTYW1hbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkppc3ItQXNoLVNodWd1ciIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWRsZWIiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhhcmltIiksDQogICAgICAgICBwY19yZWFjaGVkID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAsIGRpZ2l0cyA9IDEpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBjX3JlYWNoZWQsIHkgPSBkaXN0cmljdCkpICsNCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBnb3Zlcm5vcmF0ZSkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShwY19yZWFjaGVkKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZChiZWdpbiA9IC4zKSArIA0KICBsYWJzKHRpdGxlID0gIlBlcmNlbnQgb2YgcG9wdWxhdGlvbiByZWFjaGVkIiwgDQogICAgICAgc3VidGl0bGUgPSAiYXMgb2YgMTEgQXByaWwgMjAyMyIsIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgeCA9ICIlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCIpICsNCiAgDQogIHBsb3RfbGF5b3V0KGd1aWRlcyA9ICJjb2xsZWN0IikgJiANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCmdnc2F2ZSgiLi9pbWcvbXBjX2J5X2Rpc3RyaWN0LnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKSAgDQoNCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KZXEgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgc3ViX2Rpc3RyaWN0ID0gYWRtaW4zbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBhZG1pbjNwY29kZSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZSh3b3VuZGVkX2RlYWQgPSBzdW0od291bmRlZF9kZWFkLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gc3VtKGRhbWFnZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICMgV2hlcmUgaXMgQXJpaGEsIGFuZCB3aHkgaXMgaXQgc2hvd2luZyB1cCBoZXJlDQogIGZpbHRlcihkaXN0cmljdCAhPSAiQXJpaGEiKSAlPiUgDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJg0KICAgICAgICAgICAgICAgICAgICAgICBhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbikgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpLCBieSA9ICJkaXN0cmljdCIpICU+JSANCiAgbXV0YXRlKHdvdW5kZWRfZGVhZF8xMDBrID0gcm91bmQod291bmRlZF9kZWFkIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IHJvdW5kKGRhbWFnZWRfaG91c2VzIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMikpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgd291bmRlZF9kZWFkLCB3b3VuZGVkX2RlYWRfMTAwaywgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlcywgZGFtYWdlZF9ob3VzZXNfMTAwaykgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSAlPiUgDQogIHNldF9jYXB0aW9uKCJDYXN1YWx0aWVzIGFuZCBkYW1hZ2VkIGhvdXNlcywgYWJzb2x1dGUgZmlndXJlcyBhbmQgcGVyIDEwMCwwMDAgcGVyc29ucyIpICU+JSANCiAgZm9vdG5vdGUocGFydCA9ICJoZWFkZXIiLCBpID0gMSwgaiA9IDM6NiwgaW5saW5lID0gVFJVRSwgcmVmX3N5bWJvbHMgPSAiMSIsDQogICAgICAgICAgIHZhbHVlID0gYXNfcGFyYWdyYXBoKCJEYXRhIGZyb20gdGhlIEFzc2lzdGFuY2UgQ29vcmRpbmF0aW9uIFVuaXQsIFN5cmlhIDIwMjMwMzI4IikpDQpgYGANCg0KPGJyPg0KDQpCZWxvdyBpcyBhIGJyZWFrZG93biBvZiBiZW5lZmljaWFyaWVzIGJhc2VkIG9uIHdoZXRoZXIgdGhleSBvcmlnaW5hdGUgZnJvbSBjYW1wcyBvciB2aWxsYWdlczogDQoNCjxicj4NCg0KYGBge3J9DQpjYnIgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgZ3JvdXBfYnkodmlsbGFnZV9jYW1wcykgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICByZXBsYWNlX25hKGxpc3QodmlsbGFnZV9jYW1wcyA9ICJOQSIpKSAlPiUgDQogIG11dGF0ZShgJV9iZW5lZmljaWFyaWVzYCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcykgKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIk1vcmUgdGhhbiB0d2ljZSBhcyBtYW55IGJlbmVmaWNpYXJpZXMgZnJvbSB2aWxsYWdlcyBhcyBmcm9tIGNhbXBzIikgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JQ0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjYpDQogIA0KYGBgDQoNCg0KPGJyPjxicj48YnI+DQoNCiMjIyAzLjEgQnkgc3ViLWRpc3RyaWN0DQoNClRoZSBwbG90cyBiZWxvdyBzaG93IHRoZSBicmVha2Rvd24gb2YgYmVuZWZpY2lhcmllcyBieSBzdWItZGlzdHJpY3QuIENhdXRpb24gbXVzdCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCBhbGxvY2F0aW9ucyBhcmUgZmFpciBhY3Jvc3MgdGhlIGFmZmVjdGVkIGFyZWFzOiB0aGVyZSBhcmUgbnVtZXJvdXMgc3ViLWRpc3RyaWN0cyB3aGVyZSBhIHZlcnkgbGFyZ2UgcHJvcG9ydGlvbiBvZiB0aGUgdG90YWwgcG9wdWxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQgYnkgbXVsdGktcHVycG9zZSBjYXNoLCBpbiBwYXJ0aWN1bGFyLCBKYW5kYWlyaXMsIEhhaXJtLCBTYWxxaW4gYW5kIFNoYXJhbi4gDQoNClJlc3BvbnNlIGFjdGl2aXRpZXMgbXVzdCBiZSBwcm9wb3J0aW9uYWwgd2l0aCB0aGUgbWFnbml0dWRlIGFuZCBzZXZlcml0eSBvZiBlYXJ0aHF1YWtlIGRhbWFnZS4gT3ZlcmFsbG9jYXRpb24gZGVwcml2ZXMgYWZmZWN0ZWQgcGVyc29ucyBvZiB0aGUgYWlkIHRoZXkgYXJlIGR1ZS4gDQoNClRoZSBhdmVyYWdlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcHVsYXRpb24gcmVhY2hlZCwgb2YgYWxsIHN1Yi1kaXN0cmljdHMsIGlzIDEwLjYzJS4gDQoNCjxicj4NCg0KYGBge3IgZmlnLmhlaWdodD04fQ0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIG11dGF0ZShzdWJfZGlzdHJpY3QgPSByZWNvZGUoc3ViX2Rpc3RyaWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2FscWluIiA9ICJTYWxxaW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWZyaW4iID0gIkFmcmluIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIHN1Yl9kaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIC5ncm91cHMgPSAiZHJvcCIpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKHN1Yl9kaXN0cmljdCA9IGZjdF9yZW9yZGVyKHN1Yl9kaXN0cmljdCwgYmVuZWZpY2lhcmllcykpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IHN1Yl9kaXN0cmljdCkpICsgDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcykpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiTVBDIGJlbmVmaWNpYXJpZXMgYnkgZGlzdHJpY3QiLCANCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiYXMgb2YgIiwgcmVwb3J0X2RhdGUpLCANCiAgICAgICB5ID0gIiIpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCg0KaG5vICU+JSANCiAgZmlsdGVyKGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCBhZG1pbjNwY29kZSkgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfcG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIC5ncm91cHMgPSAiZHJvcCIpICU+JQ0KICBsZWZ0X2pvaW4oDQogICAgY2JyICU+JQ0KICAgICAgIG11dGF0ZShzdWJfZGlzdHJpY3QgPSByZWNvZGUoc3ViX2Rpc3RyaWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2FscWluIiA9ICJTYWxxaW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWZyaW4iID0gIkFmcmluIikpICU+JSANCiAgICAgIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lICANCiAgICAgIGdyb3VwX2J5KHN1Yl9kaXN0cmljdCwgYWRtaW4zcGNvZGUpICU+JSANCiAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIiksIA0KICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lDQogIGZpbHRlcighaXMubmEoc3ViX2Rpc3RyaWN0KSkgJT4lIA0KICBtdXRhdGUoc3ViX2Rpc3RyaWN0ID0gZmN0X3Jlb3JkZXIoc3ViX2Rpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBtdXRhdGUocGNfcmVhY2hlZCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyB0b3RhbF9wb3B1bGF0aW9uICogMTAwLCBkaWdpdHMgPSAxKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwY19yZWFjaGVkLCB5ID0gc3ViX2Rpc3RyaWN0KSkgKw0KICBnZW9tX2NvbChhZXMoZmlsbCA9IGdvdmVybm9yYXRlKSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKHBjX3JlYWNoZWQpKSwgDQogICAgICAgICAgICBoanVzdCA9ICJpbndhcmQiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiUGVyY2VudCBvZiBwb3B1bGF0aW9uIHJlYWNoZWQiLCANCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiYXMgb2YgIiwgcmVwb3J0X2RhdGUpLCANCiAgICAgICB5ID0gIiIsIA0KICAgICAgIHggPSAiJSBvZiBwb3B1bGF0aW9uIHJlYWNoZWQiKSArDQogIA0KICBwbG90X2xheW91dChndWlkZXMgPSAiY29sbGVjdCIpICYgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQpnZ3NhdmUoIi4vaW1nL21wY19ieV9zdWJfZGlzdHJpY3QucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA4LjI3LCB3aWR0aCA9IDExLjY5LCB1bml0cyA9ICJpbiIpICANCmBgYA0KDQo8YnI+PGJyPg0KDQojIyMgMy4yIENvbXBhcmlzb25zIHdpdGggUElOIGFuZCBlYXJ0aHF1YWtlIGRhbWFnZQ0KDQpUaGUgcGxvdCBiZWxvdyBzaG93cyB0aGUgdG90YWwgcG9wdWxhdGlvbiBvZiBlYWNoIHN1Yi1kaXN0cmljdCBvbiB0aGUgeC1heGlzIChmb3IgdGhlIG1vbWVudCwgYWxsIHBlcnNvbnMgaW4gdGhlc2UgYXJlYXMgYXJlIGFzc3VtZWQgdG8gYmUgYWZmZWN0ZWQgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgUElOKSBhbmQgdGhlIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIG9uIHRoZSB5LWF4aXMuIA0KDQpUaGUgc2l6ZSBvZiBlYWNoIHBvaW50IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRlYWQgb3Igd291bmRlZCBwZXJzb25zIHRoZXJlIHBlciAxMDAsMDAwLiANCg0KPGJyPg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTZ9DQplcSAlPiUgDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBzZWxlY3QoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCANCiAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBzdWJfZGlzdHJpY3QgPSBhZG1pbjNuYW1lX2VuLCANCiAgICAgICAgICAgICAgICAgICAgIGFkbWluM3Bjb2RlKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JQ0KICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJiANCiAgICAgICAgICAgZGlzdHJpY3QgJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgc3ViX2Rpc3RyaWN0LCBhZG1pbjNwY29kZSkgJT4lIA0KICBzdW1tYXJpc2Uod291bmRlZF9kZWFkID0gc3VtKHdvdW5kZWRfZGVhZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBkYW1hZ2VkX2hvdXNlcyA9IHN1bShkYW1hZ2VkX2hvdXNlcywgbmEucm0gPSBUUlVFKSkgJT4lDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJg0KICAgICAgICAgICAgICAgICAgICAgICBhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGFkbWluM3Bjb2RlKSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIG11dGF0ZSh3b3VuZGVkX2RlYWRfMTAwayA9IHJvdW5kKHdvdW5kZWRfZGVhZCAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzXzEwMGsgPSByb3VuZChkYW1hZ2VkX2hvdXNlcyAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogICAgbGVmdF9qb2luKGNiciAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogICAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JSANCiAgICAgICAgICAgICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwb3B1bGF0aW9uLCB5ID0gYmVuZWZpY2lhcmllcykpICsgDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSB3b3VuZGVkX2RlYWRfMTAwaykpICsgDQogIGdlb21fdGV4dF9yZXBlbChhZXMobGFiZWwgPSBzdWJfZGlzdHJpY3QpLA0KICAgICAgICAgICAgICAgICAgIHBvaW50LnBhZGRpbmcgPSAuNSwgDQogICAgICAgICAgICAgICAgICAgc2VnbWVudC5jb2xvciA9ICJncmV5NTAiLCBzaXplID0gMykgKw0KICBzY2FsZV94X2xvZzEwKGJyZWFrcyA9IGMoMCwgMzAwMCwgMTAwMDAsIDMwMDAwLCAxMDAwMDAsIDMwMDAwMCwgMTAwMDAwMCksIA0KICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV95X2xvZzEwKGJyZWFrcyA9IGMoMCwgMTAwMCwgMzAwMCwgMTAwMDAsIDMwMDAwLCAxMDAwMDApLA0KICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV9zaXplKGJyZWFrcyA9IGMoMCwgMTAwLCA1MDAsIDEwMDAsIDMwMDApKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGNvbG91ciA9ICJibHVlIiwgc2l6ZSA9IC41KSArDQogIGxhYnModGl0bGUgPSAiUG9wdWxhdGlvbiBhbmQgTVBDIGJlbmVmaWNpYXJpZXMgYnkgc3ViLWRpc3RyaWN0IiwNCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIGluZGljYXRlcyBkZWFkL3dvdW5kZWQgcGVyIDEwMCwwMDAwIiwgDQogICAgICAgeCA9ICJQb3B1bGF0aW9uIiwgDQogICAgICAgeSA9ICJCZW5lZmljaWFyaWVzIiwgDQogICAgICAgc2l6ZSA9ICJEZWFkL3dvdW5kZWRcbnBlciAxMDBrIiwgDQogICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gQ1dHLCBGU0wgYW5kIEFDVSIpICsNCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKSANCiAgDQogDQpgYGANCg0KPGJyPiANCg0KVGhlIGhpZ2hlciBvciBsb3dlciBhIHN1Yi1kaXN0cmljdCBpcyBhYm92ZSB0aGUgYmx1ZSBsaW5lLCB0aGUgbW9yZSBkaXNwcm9wb3J0aW9uYXRlIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyBhbGxvY2F0ZWQgdG8gdGhhdCBsb2NhdGlvbiBhcmUuIA0KDQpUaGlzIHNob3VsZCBhbHNvIGJlIGNvbXBhcmVkIHRvIGVhY2ggc3ViLWRpc3RyaWN0J3Mgc2hhcmUgb2YgdGhlIGVhcnRocXVha2UgZGFtYWdlLiBPZiBwYXJ0aWN1bGFyIG5vdGUsIHN1Yi1kaXN0cmljdHMgaW4gZ3JleSBoYXZlIHlldCB0byByZWNlaXZlIGFueSBNUEMgYXNzaXN0YW5jZS4gDQoNCjxicj4NCg0KYGBge3IgZmlnLmhlaWdodD02fQ0KZXEgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgc3ViX2Rpc3RyaWN0ID0gYWRtaW4zbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBhZG1pbjNwY29kZSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUNCiAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYgDQogICAgICAgICAgIGRpc3RyaWN0ICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QsIHN1Yl9kaXN0cmljdCwgYWRtaW4zcGNvZGUpICU+JSANCiAgc3VtbWFyaXNlKHdvdW5kZWRfZGVhZCA9IHN1bSh3b3VuZGVkX2RlYWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZGFtYWdlZF9ob3VzZXMgPSBzdW0oZGFtYWdlZF9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JQ0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYNCiAgICAgICAgICAgICAgICAgICAgICAgYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICAgIGxlZnRfam9pbihjYnIgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICAgICAgICAgICAgICAgIGdyb3VwX2J5KGFkbWluM3Bjb2RlKSAlPiUgDQogICAgICAgICAgICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSksIA0KICAgICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZGFtYWdlZF9ob3VzZXMsIHkgPSB3b3VuZGVkX2RlYWQpKSArIA0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gd291bmRlZF9kZWFkXzEwMGssIA0KICAgICAgICAgICAgICAgICBjb2xvdXIgPSBiZW5lZmljaWFyaWVzKSkgKyANCiAgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbCA9IHN1Yl9kaXN0cmljdCksDQogICAgICAgICAgICAgICAgICAgcG9pbnQucGFkZGluZyA9IC41LCANCiAgICAgICAgICAgICAgICAgICBzZWdtZW50LmNvbG9yID0gImdyZXk1MCIsIHNpemUgPSAzKSArDQogIHNjYWxlX3hfbG9nMTAobGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3lfbG9nMTAobGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX2NvbG91cl92aXJpZGlzKG9wdGlvbiA9ICJtYWtvIiwgZGlyZWN0aW9uID0gLTEsIA0KICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfc2l6ZShicmVha3MgPSBjKDAsIDEwMCwgNTAwLCAxMDAwLCAzMDAwKSkgKyANCiAgbGFicyh4ID0gIk51bWJlciBvZiBkYW1hZ2VkIGhvdXNlcyIsIA0KICAgICAgIHkgPSAiTnVtYmVyIG9mIHdvdW5kZWQgYW5kIGRlYWQiLCANCiAgICAgICB0aXRsZSA9ICJNYWduaXR1ZGUgb2YgZWFydGhxdWFrZSBpbXBhY3RzIGJ5IHN1Yi1kaXN0cmljdCIsIA0KICAgICAgIHN1YnRpdGxlID0gIlNpemUgc2hvd3Mgc2V2ZXJpdHkgKHdvdW5kZWQvZGVhZCBwZXIgMTAwaykgYW5kIGNvbG91ciBzaG93cyBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgc2l6ZSA9ICJXb3VuZGVkL2RlYWRcbnBlciAxMDBrIiwgDQogICAgICAgY29sb3VyID0gIkJlbmVmaWNpYXJpZXMiLCANCiAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBDV0csIEZTTCBhbmQgQUNVIikNCmBgYA0KDQo8YnI+DQoNClRoZSBDV0cgaXMgY3VycmVudGx5IHdvcmtpbmcgb24gYSBwcmlvcml0aXNhdGlvbiBzY29yZSwgd2hpY2ggY2FuIGJlIGEgdXNlZnVsIHNob3J0aGFuZCAob3IgY3J1dGNoKSwgdGhhdCB3aWxsIHRha2UgaW50byBhY2NvdW50IHByZS1leGlzdGluZyB2dWxuZXJhYmlsaXR5IChsaWtlbHkgZnJvbSB0aGUgTVNOQSkgYXMgd2VsbCBhcyBlYXJ0aHF1YWtlIGltcGFjdHMuIA0KDQo8YnI+PGJyPg0KDQoNCiMjIyAzLjMgUGxhbm5lZCBhY3Rpdml0aWVzIA0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiUGxhbm5lZCIpICU+JQ0KICBmaWx0ZXIoZ292ZXJub3JhdGUgPT0gIkFsZXBwbyIpICU+JSAgDQogIGdyb3VwX2J5KHN1Yl9kaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBmY3RfcmVvcmRlcihzdWJfZGlzdHJpY3QsIGJlbmVmaWNpYXJpZXMpKSkgKyANCiAgZ2VvbV9jb2woZmlsbCA9ICIjNDFiNmM0IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcykpLCBoanVzdCA9ICJpbndhcmQiKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCiAgbGFicyh0aXRsZSA9ICJQbGFubmVkIGJlbmVmaWNpYXJpZXMgLS0gQWxlcHBvIiwgDQogICAgICAgeCA9ICJQbGFubmVkIGJlbmVmaWNpYXJpZXMiLCANCiAgICAgICB5ID0gIiIpICsgDQoNCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiUGxhbm5lZCIpICU+JQ0KICBmaWx0ZXIoZ292ZXJub3JhdGUgPT0gIklkbGViIiAmICFpcy5uYShhZG1pbjNwY29kZSkpICU+JSAgDQogIGdyb3VwX2J5KHN1Yl9kaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBmY3RfcmVvcmRlcihzdWJfZGlzdHJpY3QsIGJlbmVmaWNpYXJpZXMpKSkgKyANCiAgZ2VvbV9jb2woZmlsbCA9ICJsaWdodGdvbGRlbnJvZCIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGJlbmVmaWNpYXJpZXMpKSwgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gdW5pdF9mb3JtYXQodW5pdCA9ICJLIiwgc2NhbGUgPSAxZS0zLCBhY2N1cmFjeSA9IDEpKSArIA0KICBsYWJzKHRpdGxlID0gIklkbGViIiwgDQogICAgICAgeCA9ICJQbGFubmVkIGJlbmVmaWNpYXJpZXMiLCANCiAgICAgICB5ID0gIiIpICArIA0KDQogIHBsb3RfbGF5b3V0KHdpZHRocyA9IGMoMiwgMykpDQoNCiMgZ2dzYXZlKCIuL2ltZy9wbGFubmVkX2J5X3N1Yl9kaXN0cmljdC5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDguMjcsIHdpZHRoID0gMTEuNjksIHVuaXRzID0gImluIikNCg0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIDQuIENhc2ggcmVzcG9uc2UgYWN0b3JzIGFuZCBjYXNoIGRpc2J1cnNlZA0KDQpJbiB0aGUgc2NhdHRlcnBsb3QgYmVsb3csIGVhY2ggcG9pbnQgaXMgYSBzaW5nbGUgY2FzaCB3b3JraW5nIGdyb3VwIHBhcnRuZXIuIFRoZSB4LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyByZWFjaGVkIHBlciBhZ2VuY3kgYW5kIHRoZSB5LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZC4gDQoNCjxicj4NCg0KYGBge3IgdG90YWxzLCBldmFsID0gRkFMU0V9DQoNCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgbXV0YXRlKHVzZF90b3RhbCA9IGZhbWlsaWVzICogcXVhbnRpdHkpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICB1c2RfdG90YWwgPSBzdW0odXNkX3RvdGFsLCBuYS5ybSA9IFRSVUUpKQ0KDQpgYGANCg0KDQoNCg0KYGBge3IgcGFydG5lci1zY2F0dGVyfQ0KcGFydG5lcl9zY2F0dGVyIDwtIGNiciAlPiUgDQogICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgZ3JvdXBfYnkoaW1wbGVtZW50aW5nX3BhcnRuZXIsIA0KICAgICAgICAgICBhZG1pbjJwY29kZSwgDQogICAgICAgICAgIGFkbWluNHBjb2RlKSAlPiUgDQogIHNsaWNlKHdoaWNoLm1heChiZW5lZmljaWFyaWVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IGNvbW11bml0aWVzKSkgKw0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gYmVuZWZpY2lhcmllcywgDQogICAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAoaW1wbGVtZW50aW5nX3BhcnRuZXIsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZW5lZmljaWFyaWVzOiAiLCBmb3JtYXQoYmVuZWZpY2lhcmllcywgYmlnLm1hcmsgPSAiLCIpLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbXVuaXRpZXM6ICIsIGNvbW11bml0aWVzKSkpICsgDQogIHNjYWxlX3hfbG9nMTAobGFiZWxzID0gY29tbWEpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyANCiAgbGFicyh4ID0gIkJlbmVmaWNpYXJpZXMgcmVhY2hlZCIsIA0KICAgICAgIHkgPSAiQ29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZCIsIA0KICAgICAgIHRpdGxlID0gIkltcGxlbWVudGluZyBwYXJ0bmVycyAtLSBiZW5lZmljaWFyaWVzIGFuZCBjb21tdW5pdGllcyByZWFjaGVkIikNCg0KZ2dwbG90bHkocGFydG5lcl9zY2F0dGVyLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIGxheW91dChzaG93bGVnZW5kID0gVFJVRSwgbGVnZW5kID0gbGlzdChmb250ID0gKGxpc3Qoc2l6ZSA9IDYpKSkpICU+JSANCiAgcGxvdGx5OjpzdHlsZShob3Zlcm9uID0gInBvaW50IikgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkJlbmVmaWNpYXJpZXMgYW5kIGNvbW11bml0aWVzIHJlYWNoZWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNoIHJlc3BvbnNlIGltcGxlbWVudGluZyBwYXJ0bmVyczsgbW91c2Ugb3ZlciBmb3IgZGV0YWlscyIsIjwvc3VwPiIpKSkNCg0KDQpgYGANCg0KPGJyPg0KDQpVU0QgYHIgcGFzdGUocm91bmQoY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kdG90YWxfdXNkKX0gLyAxMDAwMDAwLCBkaWdpdHMgPSAxKSwgIm1pbGxpb24iKWAgaGFzIGJlZW4gZGlzdHJpYnV0ZWQgYWNyb3NzIGByIGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge25fZGlzdGluY3QoLiRhZG1pbjRwY29kZSl9YCBjb21tdW5pdGllcyBhbmQgYHIgY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7bl9kaXN0aW5jdCguJGFkbWluM3Bjb2RlKX1gIHN1Yi1kaXN0cmljdHMgaW4gTlcgU3lyaWEuDQoNCg0KVGhlIHRhYmxlIGJlbG93IHN1bW1hcmlzZXMgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzY2F0dGVycGxvdCBhYm92ZSBpbiB0YWJ1bGFyIGZvcm06DQoNCjxicj4NCg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lciwgDQogICAgICAgICAgIGFkbWluMnBjb2RlLCANCiAgICAgICAgICAgYWRtaW40cGNvZGUpICU+JSANCiAgc2xpY2Uod2hpY2gubWF4KGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGdyb3VwX2J5KGltcGxlbWVudGluZ19wYXJ0bmVyKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZGlzdHJpY3RzID0gbl9kaXN0aW5jdChhZG1pbjJwY29kZSksIA0KICAgICAgICAgICAgY29tbXVuaXRpZXMgPSBuX2Rpc3RpbmN0KGFkbWluNHBjb2RlKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoYmVuZWZpY2lhcmllcykpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiUmVhY2ggYW5kIGZvb3RwcmludCBvZiBjYXNoIHJlc3BvbnNlIGFjdG9ycyIpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkgJT4lIA0KICBmb290bm90ZShhc19wYXJhZ3JhcGgoIk9ubHkgcGFydG5lcnMgd2hvIHByb3ZpZGVkIG1vcmUgdGhhbiBVU0QgMTAwL2ZhbWlseS9tb250aCIpLCANCiAgICAgICAgICAgaSA9IDEsIGogPSAxLCBwYXJ0ID0gImhlYWRlciIsIGlubGluZSA9IFRSVUUsIHJlZl9zeW1ib2xzID0gIjEiKQ0KICANCmBgYA0KDQo8YnI+PGJyPg0KDQojIyMgNC4xIFVTRCBkaXNidXJzZWQgcGVyIHBhcnRuZXINCg0KPGJyPg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfdXNkID0gc3VtKHRvdGFsX3VzZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBmYW1pbGllcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUodXNkX3Blcl9mYW0gPSByb3VuZCh0b3RhbF91c2QgLyBmYW1pbGllcywgZGlnaXRzID0gMiksIA0KICAgICAgICAgYCVfdXNkX3RvdGFsYCA9IHJvdW5kKHRvdGFsX3VzZCAvIHN1bSh0b3RhbF91c2QpICogMTAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKSkgJT4lIA0KICBhcnJhbmdlKGRlc2ModG90YWxfdXNkKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJVU0QgZGlzYnVyc2VkIGFuZCBmYW1pbGllcyByZWFjaGVkIGJ5IHBhcnRuZXIiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmbGV4dGFibGU6OnNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkNCmBgYA0KDQoNCjxicj48YnI+PGJyPg0KDQpUaGUgQ1dHIGlzIGN1cnJlbnRseSB3b3JraW5nIHdpdGggb3RoZXIgQ2x1c3RlcnMgdG8gY29uc29saWRhdGUgYWxsIGNhc2gtYmFzZWQgYWN0aXZpdGllcyBhbmQgd2lsbCBzb29uIGJlIGFibGUgdG8gcHJvdmlkZSBtb3JlIGNvbXByZWhlbnNpdmUgcmVwb3J0aW5nLiANCg0KIyA1LiBBbm5leGVzDQoNCjxicj4NCg0KIyMjIDUuMSBJbnRlcmFjdGl2ZSByZWZlcmVuY2UgdGFibGUgYXQgc3ViLWRpc3RyaWN0IGxldmVsDQoNCkNvbHVtbnMgaW5jbHVkZTogDQpgZ292ZXJub3JhdGVgLCBgZGlzdHJpY3RgLCBgc3ViLWRpc3RyaWN0YCwgDQpgdG90YWwgcG9wdWxhdGlvbmAsIGBiZW5lZmljaWFyaWVzYCwgYHRvdGFsIHVzZCBkaXNidXJzZWRgLCANCmB3b3VuZGVkIGFuZCBkZWFkYCwgYHdvdW5kZWQgYW5kIGRlYWQgcGVyIDEwMGtgLCANCmBkYW1hZ2VkIGhvdXNlc2AsIGBkYW1hZ2VkIGhvdXNlcyBwZXIgMTAwa2AsIA0KYGFkbWluM3Bjb2RlYA0KDQpgYGB7cn0NCmVxICU+JSANCiAgbGVmdF9qb2luKGxvY2F0aW9ucyAlPiUgZGlzdGluY3QoYWRtaW4zcGNvZGUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2Rpc3RyaWN0ID0gYWRtaW4zbmFtZV9lbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGxlZnRfam9pbihjYnIgJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JSANCiAgICAgICAgICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF91c2QgPSBzdW0odG90YWxfdXNkLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgc3ViX2Rpc3RyaWN0LCANCiAgICAgICAgIHRvdGFsX3BvcHVsYXRpb24sIA0KICAgICAgICAgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCANCiAgICAgICAgIHdvdW5kZWRfZGVhZCwgd291bmRlZF9kZWFkXzEwMGssIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXMsIGRhbWFnZWRfaG91c2VzXzEwMGssIA0KICAgICAgICAgYWRtaW4zcGNvZGUpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgdGFibGUgLS0gRWFydGhxdWFrZSBpbXBhY3RzLCBmcm9tIEFDVSwgZXh0cmFjdGVkIDIwMjMwMzI4IikpICU+JSANCiAgZm9ybWF0U3R5bGUoMCwgdGFyZ2V0ID0gInJvdyIsIGxpbmVIZWlnaHQgPSAiODAlIiwgZm9udFNpemUgPSAiODAlIikgJT4lIA0KICBmb3JtYXRSb3VuZChjKCJ3b3VuZGVkX2RlYWRfMTAwayIsICJkYW1hZ2VkX2hvdXNlc18xMDBrIiksIGRpZ2l0cyA9IDIpICU+JSANCiAgZm9ybWF0Q3VycmVuY3koYygidG90YWxfcG9wdWxhdGlvbiIsIA0KICAgICAgICAgICAgICAgICAgICJ3b3VuZGVkX2RlYWQiLCAiZGFtYWdlZF9ob3VzZXMiLCANCiAgICAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllcyIsICJ0b3RhbF91c2QiKSwgDQogICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gIiIsIGludGVydmFsID0gMywgbWFyayA9ICIsIikgJT4lDQogIGZvcm1hdFJvdW5kKGMoInRvdGFsX3BvcHVsYXRpb24iLCANCiAgICAgICAgICAgICAgICAid291bmRlZF9kZWFkIiwgImRhbWFnZWRfaG91c2VzIiwNCiAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllcyIsICJ0b3RhbF91c2QiKSwgZGlnaXRzID0gMCkNCiAgDQpgYGANCg0KPGJyPjxicj4NCg0KIyMjIDUuMiBSZXBvcnRpbmcgcXVhbGl0eSANCg0KVGhpcyBzZWN0aW9uIGRvY3VtZW50cyBpc3N1ZXMgZW5jb3VudGVyZWQgaW4gdGhlIGNsZWFuaW5nIG9mIDRXIGFuZCBGU0wgZGF0YSBhbmQgdGhlaXIgaW1wYWN0cyBvbiB0aGUgcXVhbGl0eSBvZiByZXBvcnRpbmcgdGhlIENXRyBjYW4gcHJvdmlkZS4gDQoNCk5vdGUgdGhhdCBzdWJzdGFudGlhbCBjbGVhbmluZyBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBhbmQgdGhlc2Ugb3V0c3RhbmRpbmcgaXNzdWVzIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBieSB0aGUgdGltZSBvZiByZXBvcnRpbmcuIA0KDQpIb3dldmVyLCB0aGUgQ1dHIHJlY29nbmlzZXMgdGhhdCBub3QgYWxsIHJlcG9ydGluZyBpc3N1ZXMgd2VyZSBkdWUgdG8gcGFydG5lciBlcnJvci4gVGhlIENXRyB3aWxsIHdvcmsgd2l0aCBwYXJ0bmVycyB0byBjb250aW51ZSBpbXByb3ZpbmcgcmVwb3J0aW5nIHF1YWxpdHkuIA0KDQo8YnI+IA0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShzb3VyY2UpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lciksDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIG11dGF0ZShgJV9iZW5lZmljaWFyaWVzYCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcykgKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlN0aWxsLCBvbmUgdGhpcmQgb2YgcmVwb3J0aW5nIG9yaWdpbmF0ZXMgZnJvbSB0aGUgRlNMIHRyYWNrZXIiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuNikNCmBgYA0KDQo8YnI+DQoNCkJlbG93IGlzIGEgYnJlYWtkb3duIG9mIHJlcG9ydGluZyBieSBkYXRlOiANCg0KPGJyPg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShtb250aCA9IG1vbnRoKGRpc3RyaWJ1dGlvbl9kYXRlLCBsYWJlbCA9IFRSVUUpKSAlPiUgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpLA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gc3VtKGJlbmVmaWNpYXJpZXMpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJKYW51YXJ5IHJlcG9ydGluZyBpcyBzdGlsbCBsYXJnZWx5IGluY29tcGxldGUiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuNikNCmBgYA0KDQo8YnI+IA0KDQpBY3Rpdml0aWVzIHBlcnRhaW5pbmcgdG8gMTQsNDMyIHdlcmUgbWlzc2luZyB0aGVpciBkYXRlIG9yIGhhZCBkYXRlcyBpbiB1bnJlYWRhYmxlIGZvcm1hdHMuIEhvd2V2ZXIsIHRoZSBjb2x1bW5zIGBzdGFydCBkYXRlYCwgYGVuZCBkYXRlYCBhbmQgYG1vbnRoIG9mIHJlcG9ydGluZ2Agd2VyZSBzb21lIG9mIHRoZSBtb3N0IHRyb3VibGVzb21lIGFuZCBjb25zdW1lZCBhIGxhcmdlIHBhcnQgb2YgdGhlIHRpbWUgZGVkaWNhdGVkIHRvIGRhdGEgY2xlYW5pbmcuIA0KDQpUaGUgQ1dHIHdvdWxkIGxpa2UgdG8gcmVpdGVyYXRlIHRoYXQgYHN0YXJ0IGRhdGVgIGFuZCBgZW5kIGRhdGVgIHNob3VsZCBiZSBlbnRlcmVkIGluIHRoZSBmb3JtYXQgbW0vZGQveXl5eSBhbmQgdGhhdCBgbW9udGggb2YgcmVwb3J0aW5nYCBzaG91bGQgYmUgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcGRvd24gbWVudS4gDQoNCjxicj4NCg0KYGBge3J9DQpjYnIgJT4lIGdyb3VwX2J5KHByb2plY3Rfc3RhdHVzKSAlPiUgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpLCANCiAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gc3VtKGJlbmVmaWNpYXJpZXMpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCIxMiBwYXJ0bmVycyBoYXZlIHJlcG9ydGVkIHBsYW5uZWQgYWN0aXZpdGllcyIpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUNCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC42KQ0KYGBgDQoNCjxicj4NCg0KVGhlIHN1bSBvZiBwbGFubmVkIGJlbmVmaWNpYXJpZXMgaXMgYHIgZm9ybWF0KGZpbHRlcihjYnIsIHByb2plY3Rfc3RhdHVzID09ICJQbGFubmVkIikgJT4lIHtzdW0oLiRiZW5lZmljaWFyaWVzKX0sIGJpZy5tYXJrID0gIiwiKWAuIElmIHRoaXMgaXMgdGhlIGV4dGVudCBvZiBhbGwgcGxhbm5lZCBNUEMgYWN0aXZpdGllcywgdGhlIENXRyBhcyBhIHdob2xlIGNhbiBleHBlY3QgdG8gcmVhY2ggYXJvdW5kIDc3JSBvZiBpdHMgdGFyZ2V0IG9mIDY2Miw5NDIgcGVyc29ucy4gDQoNCkJlbG93IGlzIGEgYnJlYWtkb3duIG9mIHBsYW5uZWQgYWN0aXRpdml0aWVzIGJ5IHNvdXJjZToNCg0KPGJyPg0KDQoNCmBgYHtyfQ0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJQbGFubmVkIikgJT4lIA0KICBncm91cF9ieShzb3VyY2UpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lciksIA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShgJV9iZW5lZmljaWFyaWVzYCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcykgKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIkJyZWFrZG93biBvZiBwbGFubmVkIGFjdGl2aXRpZXMgYnkgc291cmNlIikgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JQ0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjYpDQpgYGANCg0KDQoNCg0KDQoNCg0K